package br.com.controller.professor;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.itextpdf.text.DocumentException;

import br.com.arquitetura.controlador.AbstractMBean;
import br.com.arquitetura.excecoes.BDException;
import br.com.arquitetura.servico.ServiceCadastro;
import br.com.data.hibernate.AulaHibernateDAO;
import br.com.model.entidade.Aula;
import br.com.model.entidade.Avaliacao;
import br.com.util.relatorios.RelatoriosAlunos;


@ManagedBean
@ViewScoped
public class MBVizualizarAula extends AbstractMBean<Aula>{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Aula aula;
	private AulaHibernateDAO aulaHibernateDAO;
	private boolean possuiPlano;
	
	@ManagedProperty(value="#{serviceCadastro}")
	private ServiceCadastro serviceCadastro;
	
	public void setServiceCadastro(ServiceCadastro serviceCadastro) {
		this.serviceCadastro = serviceCadastro;
	}
	
	public MBVizualizarAula() throws IOException {
		//Recuperando o id da turma da session
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		Long aula_id = (Long) session.getAttribute("idAulaVizualizacao");
		
		if(aula_id == null){
			FacesContext.getCurrentInstance().getExternalContext().redirect("/educacao/pages/professor/index.jsf");
		}else{
			this.aulaHibernateDAO = (AulaHibernateDAO) getBean("aulaHibernateDAO");
			
			try {
				aula = aulaHibernateDAO.getById(Aula.class, aula_id);
			} catch (BDException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
		System.out.println("tudo certo ateh aqui");
		possuiPlano = (aula.getPlano() != null);
		
		
		
	}
	
	public void imprimirRelacao(){
		RelatoriosAlunos relatorio = new RelatoriosAlunos();
		try {
			aula = aulaHibernateDAO.getById(Aula.class, aula.getId());
			
			relatorio.relacaoTurma(aula.getTurma().getAlunos(), aula);
			FacesContext.getCurrentInstance().getExternalContext().redirect("/educacao/pdf/relacaoTurma.pdf");
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	public void inserirPlano(){
		
		serviceCadastro.atualizar(aula);
		possuiPlano = true;
		addFacesInformationMessage("Plano cadastrado");
	}
	
	
	public void irCadastrarDiario(){
		
		
	}
	
	public void encerrarBimestre(){
		System.out.println("entrei na aula");
		aula = aulaHibernateDAO.getById(Aula.class, aula.getId());
		System.out.println("setei a aula");
		int pesos = 0;
		if(aula.getBimestreCorrente().contains("Primeiro")){
			
			//Recuperar todas as avaliações para esta aula no primeiro bimestre
			for (Avaliacao avaliacao : aula.getAvaliacoes()) {
				//Somar os pessos dessas avaliações
				pesos = pesos + avaliacao.getPeso();
			}
			//Se a soma dos pesos for direfente de 10 entao o semestre nao pode ser encerrado
			if(pesos != 10){
				addFacesWarnMessage("O bimestre não pode ser encerrado pois a soma dos pessos das avaliações é diferente de 10.");
				addFacesWarnMessage("A soma dos pesos atualmente é " + pesos + ". Modifique as avaliações deste bimestre para que a soma dos pesos seja 10");
			}
			else{
				aula.setBimestreCorrente("Segundo Bimestre");
				serviceCadastro.atualizar(aula);
				addFacesInformationMessage("O primeiro bimestre foi encerrado");
			}
			
			return ;
		}
		
		if(aula.getBimestreCorrente().contains("Segundo")){
			//Recuperar todas as avaliações para esta aula no segundo bimestre
			for (Avaliacao avaliacao : aula.getAvaliacoes()) {
				//Somar os pessos dessas avaliações
				if(avaliacao.getBimestre().contains("Segundo")){
					pesos = pesos + avaliacao.getPeso();
				}
				
			}
			//Se a soma dos pesos for direfente de 10 entao o semestre nao pode ser encerrado
			if(pesos != 10){
				addFacesWarnMessage("O bimestre não pode ser encerrado pois a soma dos pessos das avaliações é diferente de 10.");
				addFacesWarnMessage("A soma dos pesos atualmente é " + pesos + ". Modifique as avaliações deste bimestre para que a soma dos pesos seja 10");
			}
			else{
				aula.setBimestreCorrente("Terceiro Bimestre");
				serviceCadastro.atualizar(aula);
				addFacesInformationMessage("O Segundo bimestre foi encerrado");
			}
			return ;
		}
		
		if(aula.getBimestreCorrente().contains("Terceiro")){
			//Recuperar todas as avaliações para esta aula no segundo bimestre
			for (Avaliacao avaliacao : aula.getAvaliacoes()) {
				//Somar os pessos dessas avaliações
				if(avaliacao.getBimestre().contains("Terceiro")){
					pesos = pesos + avaliacao.getPeso();
				}
				
			}
			//Se a soma dos pesos for direfente de 10 entao o semestre nao pode ser encerrado
			if(pesos != 10){
				addFacesWarnMessage("O bimestre não pode ser encerrado pois a soma dos pessos das avaliações é diferente de 10.");
				addFacesWarnMessage("A soma dos pesos atualmente é " + pesos + ". Modifique as avaliações deste bimestre para que a soma dos pesos seja 10");
			}
			else{
				aula.setBimestreCorrente("Quarto Bimestre");
				serviceCadastro.atualizar(aula);
				addFacesInformationMessage("O Terceiro bimestre foi encerrado");
			}
			return ;
		}
		
		
		if(aula.getBimestreCorrente().contains("Quarto")){
			//Recuperar todas as avaliações para esta aula no segundo bimestre
			for (Avaliacao avaliacao : aula.getAvaliacoes()) {
				//Somar os pessos dessas avaliações
				if(avaliacao.getBimestre().contains("Quarto")){
					pesos = pesos + avaliacao.getPeso();
				}
				
			}
			//Se a soma dos pesos for direfente de 10 entao o semestre nao pode ser encerrado
			if(pesos != 10){
				addFacesWarnMessage("O bimestre não pode ser encerrado pois a soma dos pessos das avaliações é diferente de 10.");
				addFacesWarnMessage("A soma dos pesos atualmente é " + pesos + ". Modifique as avaliações deste bimestre para que a soma dos pesos seja 10");
			}
			else{
				aula.setBimestreCorrente("Final");
				serviceCadastro.atualizar(aula);
				addFacesInformationMessage("O Quarto bimestre foi encerrado");
			}
			return ;
		}
		
	}


	public Aula getAula() {
		return aula;
	}


	public void setAula(Aula aula) {
		this.aula = aula;
	}

	public boolean isPossuiPlano() {
		return possuiPlano;
	}

	public void setPossuiPlano(boolean possuiPlano) {
		this.possuiPlano = possuiPlano;
	}


	
	
	
}
